<?php


namespace app\task\cron\coupon;

use api\channel\coupon\YiQiDaHandler;
use app\model\BaseSupplier;
use Carbon\Carbon;
use yunwuxin\cron\Task;
use app\model\CouponOrder;

/**
 * 新权益直充商品下单.
 *
 * 同步频率：1分钟执行1次，后期根据实际运行情况做调整
 */
class PlaceQuanYiCouponOrder extends Task
{
    /**
     * 配置指令.
     */
    protected function configure()
    {
        // 分 时 日 月 周
        $this->expression = '*/1 * * * *';
    }


    protected function handle()
    {
        echo 'CPS亿奇达订单下单-开始' . PHP_EOL;
        $lockKey = 'coupon_place.quanyi.order_lock';
        $lockVal = cache($lockKey);
        //生产环境才执行，其他环境暂时不执行
        if (isLocal()) {
            echo '本地环境不执行下单任务' . PHP_EOL;
            return true;
        }
        if ($lockVal) {
            echo '还在处理呢' . PHP_EOL;
            return true;
        }
        cache($lockKey, 1, 5*60);

        $handler = new YiQiDaHandler();

        //查询复合条件的订单
//        CouponOrder::query()->where('coupon_order.serv_type',PRODUCT_COUPON_SERV)
//            ->where('coupon_order.pay_status',CouponOrder::C_PAY_STATUS_YES)
//            ->where('coupon_order.type',CouponOrder::TYPE_COUPON_SELF_EMPLOYED)
//            ->where('coupon_order.status',CouponOrder::C_STATUS_NO_SUBMIT)
//            ->where('coupon_order.supplier_status',CouponOrder::SUPPLIER_STATUS_WAIT)
//            //->where('coupon_order.created_at','<',Carbon::now()->subMinutes(60))
//            ->withJoin(['supplier'])->where('supplier.serv_type',PRODUCT_COUPON_SERV)->select()
//            ->each(function (CouponOrder $couponOrder) use($handler){
//                //dd($couponOrder->supplier->toArray());
//                if (!($baseSupplier = $couponOrder->supplier)->isEmpty()){
//                    if (strtolower($baseSupplier->code) == strtolower(BaseSupplier::CODE_YIQIDA)) {
//                        $handler->createOrder($couponOrder);
//                    }//todo 兼容其他的渠道商
//                }
//            });

        //优化---数据分批处理
        CouponOrder::query()->where('coupon_order.serv_type',PRODUCT_COUPON_SERV)
            ->where('coupon_order.pay_status',CouponOrder::C_PAY_STATUS_YES)
            ->where('coupon_order.type',CouponOrder::TYPE_COUPON_SELF_EMPLOYED)
            ->where('coupon_order.status',CouponOrder::C_STATUS_NO_SUBMIT)
            ->where('coupon_order.supplier_status',CouponOrder::SUPPLIER_STATUS_WAIT)
            ->withJoin(['supplier'])->where('supplier.serv_type',PRODUCT_COUPON_SERV)
            ->chunk(30, function ($list) use ($handler) {
                if (empty($list)) {
                    return false;
                }
                /**
                 * @var CouponOrder $couponOrder
                 */
                foreach ($list as $couponOrder) {
                    if (($baseSupplier = $couponOrder->supplier)->isEmpty()) {
                        continue;
                    }
                    if (strtolower($baseSupplier->code) == strtolower(BaseSupplier::CODE_YIQIDA)) {
                        $handler->createOrder($couponOrder);
                    }//todo 兼容其他的渠道商
                }
            });

        cache($lockKey, null);
        echo 'CPS亿奇达订单下单-结束'.PHP_EOL;
    }
}